package com.sun.jdk.fun;

import java.util.Arrays;
import java.util.function.Supplier;

/**
 * Supplier函数式接口的使用
 */
public class SupplierTest {

    public static void main(String[] args) {
        int[] arr = {1, 3, 4, 33, 10};

        // 获取整形数组的最大值
        Integer result0 = getResult(arr, () -> {
            int maxNum = arr[0];
            for (int i = 1; i < arr.length; i++) {
                if (arr[i] > maxNum) {
                    maxNum = arr[i];
                }
            }
            return maxNum;
        });
        System.out.println("maxNum=" + result0);

        // 获取整形数组的最小值
        Integer result1 = getResult(arr, () -> {
            Arrays.sort(arr);
            return arr[0];
        });
        System.out.println("minMum=" + result1);

        // 获取整形数组之和
        Integer result2 = getResult(arr, () -> {
            int sum = 0;
            for (int i : arr) {
                sum += i;
            }
            return sum;
        });
        System.out.println("sum=" + result2);

    }

    /**
     * 此方法接收一个整形数组，和一个函数式接口Supplier,在此方法中可以对传递进来的整形数组进行一些操作
     * 比如求数组的最大/最小值，求数组之和等
     *
     * @param arr      整形数组
     * @param supplier Supplier函数式接口
     * @return 返回对数组操作后的结果
     */
    public static Integer getResult(int[] arr, Supplier<Integer> supplier) {
        return supplier.get();
    }
}
